var num: any = 10;
var str: any = "some";
var str_num: any = "88";
var bool1: any = true;
var bool2: any = false;
var static_array1: any = [1, 2, 3];
var static_array2: any = [99];
var dynamic_array1: any = [1, 2, 3];
dynamic_array1.push(4, 5);
var dynamic_array2: any = [];
dynamic_array2.push(111);
var dynamic_array3: any = [];
var obj: any = { a: 10, b: "test" };
var dict: any = {};
dict["test" + static_array1.length] = 123;

var v_null = null;
var v_undefined = undefined;
var v_nan = NaN;
var v_num = null;
v_num = 10;
var v_str = null;
v_str = "hello there";
var v_str_num = null;
v_str_num = "23";
var v_bool1 = null;
v_bool1 = true;
var v_bool2 = null;
v_bool2 = true;
var v_arr1 = null;
v_arr1 = [100, 200, 300];
var v_arr2 = null;
v_arr2 = [77];
var v_arr3 = null;
v_arr3 = [];
var v_dict1 = null;
v_dict1 = { a: 66, b: "55", c: "hh" };
var v_dict2 = null;
v_dict2 = {};

function log(x) {
    console.log(x)
}

// plus
log(num + 9);
log(num + str);
log(num + str_num);
log(num + bool1);
log(bool2 + num);
log(num + static_array1);
log(num + static_array1[1]);
log(static_array2 + num);
log(num + dynamic_array1);
log(dynamic_array2 + num);
log(11 + num + dynamic_array3);
log(num + obj);
log(num + obj.a);
log(dict + num);
log(dict.test3 + num);
log(num + v_null);
log(v_undefined + num);
log(num + v_nan);
log(v_num + num);
log(num + v_str);
log(v_str_num + num);
log(num + v_bool1);
log(v_bool2 + num);
log(num + v_arr1);
log(v_arr2 + num);
log(11 + num + v_arr3);
log(num + v_dict1);
log(num + v_dict1.a);
log(v_dict2 + num);
log(v_dict2["test3"] + num);

log(9 + str);
log(str + str_num);
log(bool1 + str);
log(str + bool2);
log(static_array1 + str);
log(static_array1[1] + str);
log(str + static_array2);
log(dynamic_array1 + str);
log(str + dynamic_array2);
log(11 + dynamic_array3 + str);
log(obj + str);
log(obj["a"] + str);
log(str + dict);
log(str + dict["test3"]);
log(v_null + str);
log(str + v_undefined);
log(v_nan + str);
log(str + v_num);
log(v_str + str);
log(str + v_str_num);
log(v_bool1 + str);
log(str + v_bool2);
log(v_arr1 + str);
log(str + v_arr2);
log(11 + v_arr3 + str);
log(str + v_dict1);
log(str + v_dict1.a);
log(v_dict2 + str);
log(v_dict2["test3"] + str);

log(str_num + 9);
log(str_num + str_num);
log(str_num + bool1);
log(bool2 + str_num);
log(str_num + static_array1);
log(str_num + static_array1[1]);
log(static_array2 + str_num);
log(str_num + dynamic_array1);
log(dynamic_array2 + str_num);
log(11 + str_num + dynamic_array3);
log(str_num + obj);
log(str_num + obj.a);
log(dict + str_num);
log(dict.test3 + str_num);
log(str_num + v_null);
log(v_undefined + str_num);
log(str_num + v_nan);
log(v_num + str_num);
log(str_num + v_str);
log(v_str_num + str_num);
log(str_num + v_bool1);
log(v_bool2 + str_num);
log(str_num + v_arr1);
log(v_arr2 + str_num);
log(11 + str_num + v_arr3);
log(str_num + v_dict1);
log(str_num + v_dict1.a);
log(v_dict2 + str_num);
log(v_dict2["test3"] + num);

log(9 + bool1);
log(bool1 + bool1);
log(bool1 + bool2);
log(static_array1 + bool1);
log(static_array1[1] + bool1);
log(bool1 + static_array2);
log(dynamic_array1 + bool1);
log(bool1 + dynamic_array2);
log(11 + dynamic_array3 + bool1);
log(obj + bool1);
log(obj["a"] + bool1);
log(bool1 + dict);
log(bool1 + dict["test3"]);
log(v_null + bool1);
log(bool1 + v_undefined);
log(v_nan + bool1);
log(bool1 + v_num);
log(v_str + bool1);
log(bool1 + v_str_num);
log(v_bool1 + bool1);
log(bool1 + v_bool2);
log(v_arr1 + bool1);
log(bool1 + v_arr2);
log(11 + v_arr3 + bool1);
log(bool1 + v_dict1);
log(bool1 + v_dict1.a);
log(v_dict2 + bool1);
log(v_dict2["test3"] + bool1);

log(9 + bool2);
log(static_array1 + bool2);
log(static_array1[1] + bool2);
log(bool2 + static_array2);
log(dynamic_array1 + bool2);
log(bool2 + dynamic_array2);
log(11 + dynamic_array3 + bool2);
log(obj + bool2);
log(obj["a"] + bool2);
log(bool2 + dict);
log(bool2 + dict["test3"]);
log(v_null + bool2);
log(bool2 + v_undefined);
log(v_nan + bool2);
log(bool2 + v_num);
log(v_str + bool2);
log(bool2 + v_str_num);
log(v_bool1 + bool2);
log(bool2 + v_bool2);
log(v_arr1 + bool2);
log(bool2 + v_arr2);
log(11 + v_arr3 + bool2);
log(bool2 + v_dict1);
log(bool2 + v_dict1.a);
log(v_dict2 + bool2);
log(v_dict2["test3"] + bool2);

log(9 + static_array1);
log(static_array1 + static_array1);
log(static_array1[1] + static_array1);
log(static_array1 + static_array2);
log(dynamic_array1 + static_array1);
log(static_array1 + dynamic_array2);
log(11 + dynamic_array3 + static_array1);
log(obj + static_array1);
log(obj["a"] + static_array1);
log(static_array1 + dict);
log(static_array1 + dict["test3"]);
log(v_null + static_array1);
log(static_array1 + v_undefined);
log(v_nan + static_array1);
log(static_array1 + v_num);
log(v_str + static_array1);
log(static_array1 + v_str_num);
log(v_bool1 + static_array1);
log(static_array1 + v_bool2);
log(v_arr1 + static_array1);
log(static_array1 + v_arr2);
log(11 + v_arr3 + static_array1);
log(static_array1 + v_dict1);
log(static_array1 + v_dict1.a);
log(v_dict2 + static_array1);
log(v_dict2["test3"] + static_array1);

log(9 + static_array2);
log(static_array2 + static_array2);
log(dynamic_array1 + static_array2);
log(static_array2 + dynamic_array2);
log(11 + dynamic_array3 + static_array2);
log(obj + static_array2);
log(obj["a"] + static_array2);
log(static_array2 + dict);
log(static_array2 + dict["test3"]);
log(v_null + static_array2);
log(static_array2 + v_undefined);
log(v_nan + static_array2);
log(static_array2 + v_num);
log(v_str + static_array2);
log(static_array2 + v_str_num);
log(v_bool1 + static_array2);
log(static_array2 + v_bool2);
log(v_arr1 + static_array2);
log(static_array2 + v_arr2);
log(11 + v_arr3 + static_array2);
log(static_array2 + v_dict1);
log(static_array2 + v_dict1.a);
log(v_dict2 + static_array2);
log(v_dict2["test3"] + static_array2);

log(9 + dynamic_array1);
log(dynamic_array1 + dynamic_array1);
log(dynamic_array1 + dynamic_array2);
log(11 + dynamic_array3 + dynamic_array1);
log(obj + dynamic_array1);
log(obj["a"] + dynamic_array1);
log(dynamic_array1 + dict);
log(dynamic_array1 + dict["test3"]);
log(v_null + dynamic_array1);
log(dynamic_array1 + v_undefined);
log(v_nan + dynamic_array1);
log(dynamic_array1 + v_num);
log(v_str + dynamic_array1);
log(dynamic_array1 + v_str_num);
log(v_bool1 + dynamic_array1);
log(dynamic_array1 + v_bool2);
log(v_arr1 + dynamic_array1);
log(dynamic_array1 + v_arr2);
log(11 + v_arr3 + dynamic_array1);
log(dynamic_array1 + v_dict1);
log(dynamic_array1 + v_dict1.a);
log(v_dict2 + dynamic_array1);
log(v_dict2["test3"] + dynamic_array1);

log(9 + dynamic_array2);
log(11 + dynamic_array3 + dynamic_array2);
log(obj + dynamic_array2);
log(obj["a"] + dynamic_array2);
log(dynamic_array2 + dict);
log(dynamic_array2 + dict["test3"]);
log(v_null + dynamic_array2);
log(dynamic_array2 + v_undefined);
log(v_nan + dynamic_array2);
log(dynamic_array2 + v_num);
log(v_str + dynamic_array2);
log(dynamic_array2 + v_str_num);
log(v_bool1 + dynamic_array2);
log(dynamic_array2 + v_bool2);
log(v_arr1 + dynamic_array2);
log(dynamic_array2 + v_arr2);
log(11 + v_arr3 + dynamic_array2);
log(dynamic_array2 + v_dict1);
log(dynamic_array2 + v_dict1.a);
log(v_dict2 + dynamic_array2);
log(v_dict2["test3"] + dynamic_array2);

log(dynamic_array3 + 9);
log(dynamic_array3 + obj);
log(dynamic_array3 + obj.a);
log(dict + dynamic_array3);
log(dict.test3 + dynamic_array3);
log(dynamic_array3 + v_null);
log(v_undefined + dynamic_array3);
log(dynamic_array3 + v_nan);
log(v_num + dynamic_array3);
log(dynamic_array3 + v_str);
log(v_str_num + dynamic_array3);
log(dynamic_array3 + v_bool1);
log(v_bool2 + dynamic_array3);
log(dynamic_array3 + v_arr1);
log(v_arr2 + dynamic_array3);
log(11 + dynamic_array3 + v_arr3);
log(dynamic_array3 + v_dict1);
log(dynamic_array3 + v_dict1.a);
log(v_dict2 + dynamic_array3);
log(v_dict2["test3"] + dynamic_array3);

log(obj + 9);
log(obj + obj);
log(obj + obj.a);
log(dict + obj);
log(dict.test3 + obj);
log(obj + v_null);
log(v_undefined + obj);
log(obj + v_nan);
log(v_num + obj);
log(obj + v_str);
log(v_str_num + obj);
log(obj + v_bool1);
log(v_bool2 + obj);
log(obj + v_arr1);
log(v_arr2 + obj);
log(11 + obj + v_arr3);
log(obj + v_dict1);
log(obj + v_dict1.a);
log(v_dict2 + obj);
log(v_dict2["test3"] + obj);

log(9 + dict);
log(dict + dict);
log(dict + dict["test3"]);
log(v_null + dict);
log(dict + v_undefined);
log(v_nan + dict);
log(dict + v_num);
log(v_str + dict);
log(dict + v_str_num);
log(v_bool1 + dict);
log(dict + v_bool2);
log(v_arr1 + dict);
log(dict + v_arr2);
log(11 + v_arr3 + dict);
log(dict + v_dict1);
log(dict + v_dict1.a);
log(v_dict2 + dict);
log(v_dict2["test3"] + dict);

log(9 + v_null);
log(v_null + v_null);
log(v_null + v_undefined);
log(v_nan + v_null);
log(v_null + v_num);
log(v_str + v_null);
log(v_null + v_str_num);
log(v_bool1 + v_null);
log(v_null + v_bool2);
log(v_arr1 + v_null);
log(v_null + v_arr2);
log(11 + v_arr3 + v_null);
log(v_null + v_dict1);
log(v_null + v_dict1.a);
log(v_dict2 + v_null);
log(v_dict2["test3"] + v_null);

log(v_undefined + 9);
log(v_undefined + v_undefined);
log(v_undefined + obj.a);
log(v_undefined + v_nan);
log(v_num + v_undefined);
log(v_undefined + v_str);
log(v_str_num + v_undefined);
log(v_undefined + v_bool1);
log(v_bool2 + v_undefined);
log(v_undefined + v_arr1);
log(v_arr2 + v_undefined);
log(11 + v_undefined + v_arr3);
log(v_undefined + v_dict1);
log(v_undefined + v_dict1.a);
log(v_dict2 + v_undefined);
log(v_dict2["test3"] + v_undefined);

log(v_nan + 9);
log(v_nan + v_nan);
log(v_num + v_nan);
log(v_nan + v_str);
log(v_str_num + v_nan);
log(v_nan + v_bool1);
log(v_bool2 + v_nan);
log(v_nan + v_arr1);
log(v_arr2 + v_nan);
log(11 + v_nan + v_arr3);
log(v_nan + v_dict1);
log(v_nan + v_dict1.a);
log(v_dict2 + v_nan);
log(v_dict2["test3"] + v_nan);

log(9 + v_num);
log(v_num + v_num);
log(v_str + v_num);
log(v_num + v_str_num);
log(v_bool1 + v_num);
log(v_num + v_bool2);
log(v_arr1 + v_num);
log(v_num + v_arr2);
log(11 + v_arr3 + v_num);
log(v_num + v_dict1);
log(v_num + v_dict1.a);
log(v_dict2 + v_num);
log(v_dict2["test3"] + v_num);

log(9 + v_str);
log(v_str + v_str);
log(v_str + v_str_num);
log(v_bool1 + v_str);
log(v_str + v_bool2);
log(v_arr1 + v_str);
log(v_str + v_arr2);
log(11 + v_arr3 + v_str);
log(v_str + v_dict1);
log(v_str + v_dict1.a);
log(v_dict2 + v_str);
log(v_dict2["test3"] + v_str);

log(9 + v_str_num);
log(v_str_num + v_str_num);
log(v_bool1 + v_str_num);
log(v_str_num + v_bool2);
log(v_arr1 + v_str_num);
log(v_str_num + v_arr2);
log(11 + v_arr3 + v_str_num);
log(v_str_num + v_dict1);
log(v_str_num + v_dict1.a);
log(v_dict2 + v_str_num);
log(v_dict2["test3"] + v_str_num);

log(9 + v_bool1);
log(v_bool1 + v_bool1);
log(v_bool1 + v_bool2);
log(v_arr1 + v_bool1);
log(v_bool1 + v_arr2);
log(11 + v_arr3 + v_bool1);
log(v_bool1 + v_dict1);
log(v_bool1 + v_dict1.a);
log(v_dict2 + v_bool1);
log(v_dict2["test3"] + v_bool1);

log(9 + v_arr1);
log(v_arr1 + v_arr1);
log(v_arr1 + v_arr2);
log(11 + v_arr3 + v_arr1);
log(v_arr1 + v_dict1);
log(v_arr1 + v_dict1.a);
log(v_dict2 + v_arr1);
log(v_dict2["test3"] + v_arr1);

log(9 + v_arr2);
log(v_arr2 + v_arr2);
log(11 + v_arr3 + v_arr2);
log(v_arr2 + v_dict1);
log(v_arr2 + v_dict1.a);
log(v_dict2 + v_arr2);
log(v_dict2["test3"] + v_arr2);

log(v_dict1 + 9);
log(v_dict1 + v_dict1);
log(v_dict1 + v_dict1.a);
log(v_dict2 + v_dict1);
log(v_dict2["test3"] + v_dict1);

log(v_dict2 + 9);
log(v_dict2 + v_dict2);
log(v_dict2["test3"] + v_dict2);
